/*
 * @Author: HeAo
 * @Date: 2022-08-21 20:19:45
 * @LastEditTime: 2022-08-22 21:16:24
 * @LastEditors: HeAo
 * @Description: 
 * @FilePath: \JavaScripe\day-10\1-原型链继承.js
 * 别乱动！
 */
// 父构造函数
function Animal() {
  this.name = 'animal'
}
Animal.prototype.getAnimalName = function () {
  console.log(this.name + ' getAnimalName');
}
// 子构造函数
function Dog() {
  this.name = 'Dog'
}
// 继承
Dog.prototype = new Animal()
Dog.prototype.getDogName = function () {
  console.log(this.name + ' getDogName');
}
Object.defineProperty(Dog.prototype, 'constructor', {
  enumerable: false,
  value: Dog

})

var d1 = new Dog()
d1.getAnimalName() //Dog getAnimalName
d1.getDogName() //Dog getDogName

// 检验d1的类型
// console.log(d1); //发现d1的类型并不是Dog 这就造成了类型混乱，因此需要改变constructor的指向，其实在这也可以看得出来，constructor对结果没有什么影响
// // 检验constructor指向
// console.log(d1.constructor === Animal);
// console.log(d1.constructor === Object);

// // 检验原型链
console.log(d1 instanceof Dog); //true
console.log(d1 instanceof Animal); //true
console.log(d1 instanceof Object); //true


// // 检验当子构造函数添加方法时，是否会对父类造成影响
// var a = new Animal()
// a.getAnimalName() // animal getAnimalName 由此可见，子构造函数不会对父构造函数造成影响
// // a.getDogName() //报错 说明父构造函数的实例 不能使用子构造函数的方法
// console.log(a);